package sword.offer;

/**
 * 编写一个函数，输入是一个无符号整数（以二进制串的形式），返回其二进制表达式中数字位数为 '1' 的个数（也被称为 汉明重量).）。
 * @author 胡宇轩
 * @Email: yuxuan.hu01@bianlifeng.com
 */
public class Fifteen {
    public class Solution {
        int result;
        public int hammingWeight(int n) {
            long l = n;
            recur(l);
            return result;
        }

        void recur(long n){
            if(n == 0){
                return ;
            }
            if((n & 1) == 1){
                result++;
            }
            recur(n >> 1);
        }
    }

    /**
     * 这个解法 估计的十分熟悉位运算吧。
     * 将一个数的最低位翻转为0 省略了很多中间无用的0操作啊
     * */
    class Solution1 {
        public int hammingWeight(int n) {
            int result = 0;
            while(n != 0){
                n &= n-1;
                result++;
            }
            return result;
        }
    }
}
